home *** CD-ROM | disk | FTP | other *** search
/ Cream of the Crop 25 / Cream of the Crop 25.iso / math / aprs790.zip / SIGPLOT.BAS < prev    next >
BASIC Source File  |  1997-03-10  |  16KB  |  494 lines

  1. DECLARE SUB Help (a$)
  2. DECLARE SUB PlotAvgA (a$, N!)
  3. DECLARE SUB InitScrnA ()
  4. DECLARE SUB InitScrn ()
  5. DECLARE SUB DoPoint (N!, SIG!, PRN$, EL$, Az$)
  6. DECLARE SUB PlotAvg (a$, N!)
  7. DECLARE SUB Gfield (a!, a$, B$)
  8. DECLARE SUB Save ()
  9. DECLARE SUB Load ()
  10. COMMON SHARED MX(), NO(), MI(), SS(), MA(), SSAZ(), SSZZ(), NOAZ(), NOZZ(), Az, SB(), NA()
  11. DIM MX(2, 40)
  12. DIM NO(2, 99), MI(2, 99), SS(2, 99), MA(2, 99)
  13. DIM SSAZ(2, 361, 6), NOAZ(2, 361, 6), SB(2, 6), NA(2, 6)
  14. CALL Help("X")
  15. INPUT "Enter the COM# port for the 1st GPS unit (1 or 2), [1]"; a$
  16. IF a$ = "" THEN Port$ = "COM1" ELSE Port$ = "COM" + a$
  17. OPEN Port$ + ":4800,n,8,1,cs0,cd0,ds0" FOR RANDOM AS #1
  18. INPUT "Enter the COM# port for the 2nd GPS unit (1, 2 or NONE), [N]"; a$
  19. IF a$ = "1" OR a$ = "2" THEN
  20.    OPEN "COM" + a$ + ":4800,n,8,1,cs0,cd0,ds0" FOR RANDOM AS #2
  21.    Port2 = 2
  22. END IF
  23. ON ERROR GOTO errortrap
  24. SCREEN 9
  25. WIDTH 80, 43
  26. CALL InitScrn
  27. DO
  28.  GOSUB More1
  29.  LOCATE 5, 1: PRINT LEFT$("1: " + a$, 79)
  30.  IF LEFT$(a$, 6) = "$GPGGA" THEN
  31.     LOCATE 43, 1: PRINT LEFT$(a$, 79);
  32.  ELSEIF LEFT$(a$, 6) = "$GPGSV" THEN
  33.     a = 7
  34.     CALL Gfield(a, a$, NSS$)
  35.     CALL Gfield(a, a$, NCS$): LOCATE 1 + VAL(NCS$), 1: PRINT LEFT$(a$, 79)
  36.     CALL Gfield(a, a$, NSA$)
  37.     L = LEN(a$) - 4
  38.     DO WHILE a > 2 AND a < L
  39.        CALL Gfield(a, a$, PRN$)
  40.        LOCATE 9 + VAL(PRN$), 1: PRINT PRN$;
  41.        CALL Gfield(a, a$, EL$): PRINT RIGHT$("    " + EL$, 4);
  42.        CALL Gfield(a, a$, Az$): PRINT RIGHT$("    " + Az$, 4);
  43.        CALL Gfield(a, a$, SNR$)
  44.        SIG = VAL(SNR$)
  45.        IF SIG > 20 AND SIG < 60 THEN CALL DoPoint(1, SIG, PRN$, EL$, Az$)
  46.     LOOP
  47.  END IF
  48. REM Now PORT TWO! * * * * * * * * * * * * * * * ** * * **** **
  49. IF Port2 THEN
  50.    GOSUB More2
  51.    IF a2$ = "NoComms" THEN Port2 = 0
  52.    LOCATE 6, 1: PRINT LEFT$("2: " + a2$, 79)
  53.    IF LEFT$(a2$, 6) = "$GPGGA" THEN
  54.    ELSEIF LEFT$(a2$, 6) = "$GPGSV" THEN
  55.       a = 7
  56.       CALL Gfield(a, a2$, NSS$)
  57.       CALL Gfield(a, a2$, NCS$)
  58.       CALL Gfield(a, a2$, NSA$)
  59.       L = LEN(a2$) - 4
  60.       DO WHILE a > 2 AND a < L
  61.          CALL Gfield(a, a2$, PRN$)
  62.          LOCATE 9 + VAL(PRN$), 20
  63.          CALL Gfield(a, a2$, EL$)
  64.          CALL Gfield(a, a2$, Az$)
  65.          CALL Gfield(a, a2$, SNR$)
  66.          SIG = VAL(SNR$)
  67.          IF SIG > 20 AND SIG < 60 THEN CALL DoPoint(2, SIG, PRN$, EL$, Az$)
  68.       LOOP
  69.    END IF
  70. END IF
  71. a$ = UCASE$(INKEY$)
  72. IF a$ = "H" THEN a$ = "": CALL Help(a$)
  73. IF a$ = "R" THEN Port2 = 2: a2$ = ""
  74. IF a$ = "A" THEN CALL InitScrnA
  75. IF a$ = "E" THEN CALL InitScrn
  76. IF a$ = "S" THEN CALL Save
  77. IF a$ = "L" THEN CALL Load
  78. IF a$ = "Q" THEN END
  79. IF a$ = "D" OR a$ = "P" THEN
  80.    IF Az = 0 THEN
  81.       CALL InitScrn
  82.       CALL PlotAvg(a$, 1)
  83.       CALL PlotAvg(a$, 2)
  84.    END IF
  85.    IF Az = 1 THEN
  86.       CALL InitScrnA
  87.       CALL PlotAvgA(a$, 1)
  88.       CALL PlotAvgA(a$, 1)
  89.    END IF
  90. END IF
  91. LOOP
  92. STOP
  93.  
  94.  
  95.  
  96. More1:   t = 1: j = 1: a = 0: strt = TIMER
  97.     DO WHILE j > 0 AND a = 0
  98.        IF ABS(TIMER - strt) >= t THEN j = 0: a$ = "NoComms": As$ = "": EXIT DO
  99.        a = INSTR(As$, CHR$(13))
  100.        IF a > 0 THEN a$ = LEFT$(As$, a - 1): As$ = MID$(As$, a + 1): EXIT DO
  101.        IF LOC(1) > 0 THEN As$ = As$ + INPUT$(LOC(1), 1)
  102.     LOOP
  103.     DO WHILE LEFT$(a$, 1) < " " AND LEN(a$) > 0
  104.        a$ = MID$(a$, 2)
  105.     LOOP
  106.     RETURN
  107.  
  108. More2:   t = 1: j = 1: a = 0: strt = TIMER
  109.     DO WHILE j > 0 AND a = 0
  110.        IF ABS(TIMER - strt) >= t THEN j = 0: a2$ = "NoComms": As2$ = "": EXIT DO
  111.        a = INSTR(As2$, CHR$(13))
  112.        IF a > 0 THEN a2$ = LEFT$(As2$, a - 1): As2$ = MID$(As2$, a + 1): EXIT DO
  113.        IF LOC(2) > 0 THEN As2$ = As2$ + INPUT$(LOC(2), 2)
  114.        LOOP
  115.     DO WHILE LEFT$(a2$, 1) < " " AND LEN(a2$) > 0
  116.        a2$ = MID$(a2$, 2)
  117.     LOOP
  118.     RETURN
  119.  
  120.  
  121.  
  122. errortrap: RESUME NEXT
  123.  
  124. SUB DoPoint (N, SIG, PRN$, EL$, Az$)
  125.       
  126.     AZd = VAL(Az$)
  127.     ELd = VAL(EL$)
  128.     SAT = VAL(PRN$): IF MX(N, SAT) < SIG THEN MX(N, SAT) = SIG
  129.     ELr = ELd / 57.4
  130.     AZr = (90 + AZd) / 57.4
  131.     SS(N, ELd) = SS(N, ELd) + SIG
  132.     NO(N, ELd) = NO(N, ELd) + 1
  133.     IF ELd > 0 AND ELd <= 20 THEN
  134.         ELz = 1
  135.         Cz = 11
  136.     END IF
  137.     IF ELd > 20 AND ELd <= 40 THEN
  138.         ELz = 2
  139.         Cz = 12
  140.     END IF
  141.     IF ELd > 40 AND ELd <= 60 THEN
  142.         ELz = 3
  143.         Cz = 13
  144.     END IF
  145.     IF ELd > 60 THEN
  146.         ELz = 4
  147.         Cz = 14
  148.     END IF
  149.     SSAZ(N, AZd, ELz) = SSAZ(N, AZd, ELz) + SIG
  150.     NOAZ(N, AZd, ELz) = NOAZ(N, AZd, ELz) + 1
  151.     IF MI(N, ELd) = 0 THEN MI(N, ELd) = SIG
  152.     IF SIG > MA(N, ELd) THEN MA(N, ELd) = SIG
  153.     IF SIG < MI(N, ELd) THEN MI(N, ELd) = SIG
  154.     COE = 7 * COS(ELr)
  155.     SIE = 5 * SIN(ELr)
  156.     COEZ = 7 * COS(AZr)
  157.     SIEZ = 5 * SIN(AZr)
  158.     PRINT "  "; SIG;
  159.     PRINT RIGHT$("    " + STR$(MX(N, SAT)), 3)
  160.     c = 14: IF N = 2 THEN c = 12
  161.     IF Az = 0 THEN
  162.         x = 240: y = 300: IF N = 2 THEN x = 238: y = 302 'was 198
  163.         CIRCLE (x + SIG * COE, y - SIG * SIE), 1, c
  164.     END IF
  165.     IF Az = 1 THEN
  166.         SIGZ = SIG / 2
  167.         x = 417: y = 175: IF N = 2 THEN x = 418: y = 177
  168.         CIRCLE (x + SIGZ * COEZ, y - SIGZ * SIEZ), 1, Cz
  169.     END IF
  170.  
  171. END SUB
  172.  
  173. SUB Gfield (a, a$, B$)
  174.  
  175.  B = INSTR(a + 1, a$, ",")
  176.  IF B >= a + 1 THEN B$ = MID$(a$, a + 1, B - (a + 1)) ELSE B = 1: B$ = ""
  177.  a = B
  178. END SUB
  179.  
  180. SUB Help (a$)
  181. CLS : PRINT "SIGPLOT.bas Version 1.2  by  Bob Bruninga, WB4APR.  16 Jan 1997"
  182. PRINT
  183. PRINT "This APRS program monitors the NMEA $GPGSV sentence to extract AZ/EL and Signal"
  184. PRINT "data from satellites in view and then plot an Antenna pattern.  It can monitor"
  185. PRINT "TWO GPS units simultaneously so you can compare one antenna to a reference.  "
  186. PRINT
  187. PRINT "Each second's data is plotted as it comes in, but you may press either D for"
  188. PRINT "Dots or L for a line plot.  After a few hours you should have enough data for"
  189. PRINT "a good Elevation plot since you are taking data from ALL azimuths.  But the"
  190. PRINT "AZIMUTH plot takes 12 hours to get enough data for all the possible Azimuths"
  191. PRINT "Since you are only taking data from 1/4 of the elevations for each profile."
  192. PRINT
  193. PRINT "The AZIMUTH shows 4 colors, one for each elevation range.  This is because the"
  194. PRINT "Elevation plot is not equal at all elevations.  Also to make the plot look"
  195. PRINT "reasonable until enough data comes in, missing data are assumed to be the"
  196. PRINT "average value, so you will see perfect circles until the data fills in."
  197. PRINT
  198. PRINT "REMEMBER THESE Three QUESTIONABLE ASSUMPTIONS:"
  199. PRINT "  1) All satellites are transmitting equal output powers"
  200. PRINT "  2) Your sky view is unobstructed in all directions."
  201. PRINT "  3) For the ELEVATION plot, that your AZIMUTH pattern is OMNIdirectional"
  202. PRINT "     Meaning a sat at 45° to East is averaged with all other 45° sats, etc"
  203. PRINT
  204. IF a$ = "" THEN
  205.    PRINT
  206.    PRINT
  207.    PRINT
  208.    PRINT "Hit E to return to the ELEVATION plot"
  209.    PRINT
  210.    PRINT "Hit A to return to the AZIMUTH plot"
  211.    PRINT
  212.    DO UNTIL a$ <> "": a$ = UCASE$(INKEY$): LOOP
  213. END IF
  214.  
  215. END SUB
  216.  
  217. SUB InitScrn
  218.     Az = 0
  219.     CLS
  220.     LOCATE 8, 1: PRINT "SAT EL  AZ  SIG MAX  SG2 MX2"
  221.     LOCATE 9, 1: PRINT "--- --  --  --- ---  --- ---"
  222.     LINE (240, 300)-(594, 48), 14, B
  223.     REM x*7 and y*5 is a square plot
  224.     FOR i = 0 TO 90
  225.         a = i / 57.4
  226.         PSET (240 + 350 * COS(a), 300 - 250 * SIN(a)), 15
  227.         PSET (240 + 280 * COS(a), 300 - 200 * SIN(a)), 15
  228.         PSET (240 + 210 * COS(a), 300 - 150 * SIN(a)), 15
  229.         IF INT(i / 10) = i / 10 THEN
  230.            CIRCLE (240 + 350 * COS(a), 300 - 250 * SIN(a)), 1, 15
  231.            CIRCLE (240 + 280 * COS(a), 300 - 200 * SIN(a)), 1, 15
  232.            CIRCLE (240 + 210 * COS(a), 300 - 150 * SIN(a)), 1, 15
  233.         END IF
  234.     NEXT
  235.     LOCATE 39, 32: PRINT "SIGNAL STRENGTH          30      40      50"
  236.     LOCATE 38, 76: PRINT "0"
  237.     LOCATE 32, 75: PRINT "10";
  238.     LOCATE 27, 73: PRINT "20"
  239.     LOCATE 22, 70: PRINT "30"
  240.     LOCATE 18, 66: PRINT "40"
  241.     LOCATE 14, 60: PRINT "50"
  242.     LOCATE 8, 47: PRINT "70"
  243.     LOCATE 7, 40: PRINT "80"
  244.     LOCATE 6, 32: PRINT "90"
  245.     FOR i = 1 TO 9
  246.         LOCATE 7 + i, 32: PRINT MID$("ELEVATION", i, 1);
  247.         LOCATE 7 + i, 34: PRINT MID$("  ANGLE  ", i, 1);
  248.     NEXT
  249.     LOCATE 25, 32: PRINT "WB4APR";
  250.     LOCATE 26, 32: PRINT "APRS SIGPLOT1.3";
  251.     LOCATE 28, 32: PRINT "A - AZIMUTH plot";
  252.     LOCATE 29, 32: PRINT "D - DOTS min/max/avg";
  253.     LOCATE 30, 32: PRINT "E - EL data (current)";
  254.     LOCATE 31, 32: PRINT "H - HELP";
  255.     LOCATE 32, 32: PRINT "L - LOAD Data";
  256.     LOCATE 33, 32: PRINT "P - PLOT Line";
  257.     LOCATE 34, 32: PRINT "Q - to QUIT.";
  258.     LOCATE 35, 32: PRINT "R - RETRY comms";
  259.     LOCATE 36, 32: PRINT "S - SAVE Data";
  260.  
  261.     LOCATE 8, 55: PRINT "Let program run for"
  262.     LOCATE 9, 55: PRINT "At least an hour to"
  263.     LOCATE 10, 55: PRINT "fill in all angles."
  264.     LOCATE 12, 65: PRINT "de WB4APR"
  265. END SUB
  266.  
  267. SUB InitScrnA
  268.     Az = 1
  269.     CLS
  270.     LOCATE 8, 1: PRINT "SAT EL  AZ  SIG MAX  SG2 MX2"
  271.     LOCATE 9, 1: PRINT "--- --  --  --- ---  --- ---"
  272.     LINE (240, 300)-(594, 48), 14, B
  273.     REM x*7 and y*5 is a square plot
  274.     strt = TIMER
  275.  
  276.     FOR i = 0 TO 360 STEP 2
  277.         a = i / 57.4
  278.         COSa = COS(a)
  279.         SINa = SIN(a)
  280.         PSET (417 + 177 * COSa, 175 - 125 * SINa), 15
  281.         PSET (417 + 137 * COSa, 175 - 100 * SINa), 15
  282.         PSET (417 + 102 * COSa, 175 - 75 * SINa), 15
  283.         IF INT(i / 10) = i / 10 THEN
  284.            CIRCLE (417 + 177 * COSa, 175 - 125 * SINa), 1, 15
  285.            CIRCLE (417 + 137 * COSa, 175 - 100 * SINa), 1, 15
  286.            CIRCLE (417 + 102 * COSa, 175 - 75 * SINa), 1, 15
  287.         END IF
  288.     NEXT
  289.     LOCATE 15, 50: PRINT "WB4APR"
  290.     LOCATE 16, 45: PRINT "APRS SIGPLOT v1.2"
  291.     LOCATE 18, 45: PRINT "ELEVATION ANGLES"
  292.     LOCATE 20, 52: PRINT "00-20"
  293.     LOCATE 22, 52: PRINT "20-40"
  294.     LOCATE 24, 52: PRINT "40-60"
  295.     LOCATE 26, 52: PRINT "60-80"
  296.     LOCATE 28, 45: PRINT "For good plot, run"
  297.     LOCATE 29, 45: PRINT "  for 12 hours"
  298.     FOR i = 1 TO 4
  299.         y = 136 + 16 * i
  300.         LINE (370, y)-(400, y + 8), 10 + i, BF
  301.     NEXT
  302.     
  303. REM    LOCATE 39, 32: PRINT "SIGNAL STRENGTH          30      40      50"
  304.     LOCATE 22, 76: PRINT "270"
  305.     LOCATE 12, 70: PRINT "315";
  306.     LOCATE 12, 34: PRINT "45"
  307.     LOCATE 22, 28: PRINT "90"
  308.     LOCATE 33, 34: PRINT "135"
  309.     LOCATE 38, 52: PRINT "180"
  310.     LOCATE 33, 70: PRINT "225"
  311.     LOCATE 6, 53: PRINT "0"
  312. REM    FOR i = 1 TO 15
  313. REM        LOCATE 7 + i, 32: PRINT MID$("ELEVATION ANGLE", i, 1)
  314. REM    NEXT
  315.     
  316.     LOCATE 39, 32: PRINT "A - AZ data (current)";
  317.     LOCATE 40, 32: PRINT "D - DATA collected";
  318.     LOCATE 41, 32: PRINT "E - ELEVATION plot";
  319.     LOCATE 42, 32: PRINT "L - LOAD Data";
  320.     LOCATE 39, 55: PRINT "P - PLOT Line";
  321.     LOCATE 40, 55: PRINT "Q - QUIT.";
  322.     LOCATE 41, 55: PRINT "R - RETRY comms";
  323.     LOCATE 42, 55: PRINT "S - SAVE Data";
  324.  
  325.  
  326. REM    LOCATE 8, 55: PRINT "Let program run for"
  327. REM    LOCATE 9, 55: PRINT "At least an hour to"
  328. REM    LOCATE 10, 55: PRINT "fill in all angles."
  329. REM    LOCATE 12, 65: PRINT "de WB4APR"
  330. END SUB
  331.  
  332. SUB Load
  333. Name2:
  334. LOCATE 40, 1: PRINT "                                               "
  335. LOCATE 40, 2: PRINT "                                               "
  336. F$ = "GPSANT.DAT"
  337. LINE (0, 310)-(620, 325), 14, B
  338. LOCATE 40, 2: PRINT "Name of File ("; F$; ")";
  339. INPUT a$
  340. IF a$ <> "" THEN
  341.    IF INSTR(a$, ".") = 0 THEN a$ = a$ + ".dat"
  342.    F$ = a$
  343. END IF
  344. IF LEN(F$) > 12 THEN GOTO Name2
  345. OPEN F$ FOR INPUT AS #3
  346. FOR N = 1 TO 2
  347.         FOR L = 1 TO 36
  348.                 INPUT #3, MX(N, L)
  349.         NEXT L
  350.         FOR L = 1 TO 91
  351.                 INPUT #3, NO(N, L)
  352.                 INPUT #3, MI(N, L)
  353.                 INPUT #3, SS(N, L)
  354.                 INPUT #3, MA(N, L)
  355.         NEXT L
  356.         FOR L = 1 TO 361
  357.                 FOR M = 1 TO 6
  358.                         INPUT #3, SSAZ(N, L, M)
  359.                         INPUT #3, NOAZ(N, L, M)
  360.                 NEXT M
  361.         NEXT L
  362.         FOR L = 1 TO 6
  363.                 INPUT #3, SB(N, L)
  364.                 INPUT #3, NA(N, L)
  365.         NEXT L
  366. NEXT N
  367. IF Az = 0 THEN CALL InitScrn
  368. IF Az = 1 THEN CALL InitScrnA
  369. END SUB
  370.  
  371. SUB PlotAvg (a$, N)
  372.  First = -1
  373.  FOR i = 1 TO 90
  374.      a = i / 57.4
  375.      COE = 7 * COS(a)
  376.      SIE = 5 * SIN(a)
  377.      SA = 0: IF NO(N, i) > 0 THEN SA = SS(N, i) / NO(N, i)
  378.      IF SA > 20 AND SA < 60 THEN
  379.         x = 240: y = 300: c = 10
  380.         IF N = 2 THEN x = 238: y = 302: c = 12 'was 198
  381.         IF a$ = "P" THEN
  382.            IF First THEN
  383.                 X0 = x + SA * COE: Y0 = y - SA * SIE
  384.                 First = 0
  385.            ELSE X1 = x + SA * COE: Y1 = y - SA * SIE
  386.                 LINE (X0, Y0)-(X1, Y1), c
  387.                 X0 = X1: Y0 = Y1
  388.            END IF
  389.         ELSE
  390.            CIRCLE (x + SA * COE, y - SA * SIE), 3, c
  391.         END IF
  392.         CIRCLE (x + MI(N, i) * COE, y - MI(N, i) * SIE), 1, c
  393.         CIRCLE (x + MA(N, i) * COE, y - MA(N, i) * SIE), 1, c
  394.      END IF
  395.    NEXT i
  396.  
  397. END SUB
  398.  
  399. SUB PlotAvgA (a$, N)
  400.  First = -1
  401.  NA = 0: SB = 0: SC = 0
  402.  FOR ELz = 1 TO 4 'Compute average value for each of the 4 elevation ranges
  403.      FOR i = 0 TO 360
  404.         IF NOAZ(N, i, ELz) > 0 THEN
  405.                 SB(N, ELz) = SSAZ(N, i, ELz) / NOAZ(N, i, ELz) + SB(N, ELz)
  406.                 NA(N, ELz) = NA(N, ELz) + 1
  407.         END IF
  408.      NEXT i
  409.  NEXT ELz
  410.  FOR ELz = 1 TO 4  'Now draw the rings
  411.      FOR i = 0 TO 360
  412.         a = (90 + i) / 57.4
  413.         COE = 7 * COS(a)
  414.         SIE = 5 * SIN(a)
  415.         SA = 0: SC = 1
  416.         IF INT(i / 10) = i / 10 THEN  'At least every 10 deg, use the avg
  417.                 SA = SB(N, ELz) / NA(N, ELz): SC = 0
  418.         END IF
  419.         REM If there is a data point, then use it for SA
  420.         IF NOAZ(N, i, ELz) > 0 THEN SA = SSAZ(N, i, ELz) / NOAZ(N, i, ELz)
  421.         IF SA > 20 AND SA < 60 THEN
  422.                 SA = SA / 2
  423.                 x = 417: y = 175
  424.                 IF ELz = 1 THEN c = 11
  425.                 IF ELz = 2 THEN c = 12
  426.                 IF ELz = 3 THEN c = 13
  427.                 IF ELz = 4 THEN c = 14
  428.                 IF N = 2 THEN
  429.                         x = 418
  430.                         y = 177
  431.                         IF ELz = 1 THEN c = 11
  432.                         IF ELz = 2 THEN c = 12
  433.                         IF ELz = 3 THEN c = 13
  434.                         IF ELz = 4 THEN c = 14
  435.                 END IF
  436.                 IF a$ = "P" THEN
  437.                    IF First THEN
  438.                       X0 = x + SA * COE: Y0 = y - SA * SIE
  439.                       First = 0
  440.                    ELSE X1 = x + SA * COE: Y1 = y - SA * SIE
  441.                         LINE (X0, Y0)-(X1, Y1), c
  442.                         X0 = X1: Y0 = Y1
  443.                    END IF
  444.                 ELSE
  445.                    IF SC = 1 THEN
  446.                       CIRCLE (x + SA * COE, y - SA * SIE), 3, c
  447.                    END IF
  448.                 END IF
  449.         END IF
  450.      NEXT i
  451.      SB(N, ELz) = 0: NA(N, ELz) = 0
  452.  NEXT ELz
  453. END SUB
  454.  
  455. SUB Save
  456. Names:
  457. LOCATE 40, 1: PRINT "                                               "
  458. LOCATE 40, 2: PRINT "                                               "
  459. F$ = "GPSANT.DAT"
  460. LINE (0, 310)-(620, 325), 14, B
  461. LOCATE 40, 2: PRINT "Name of File ("; F$; ")";
  462. INPUT a$
  463. IF a$ <> "" THEN
  464.    IF INSTR(a$, ".") = 0 THEN a$ = a$ + ".dat"
  465.    F$ = a$
  466. END IF
  467. IF LEN(F$) > 12 THEN GOTO Names
  468. OPEN F$ FOR OUTPUT AS #3
  469. FOR N = 1 TO 2
  470.         FOR L = 1 TO 36
  471.                 PRINT #3, MX(N, L)
  472.         NEXT L
  473.         FOR L = 1 TO 91
  474.                 PRINT #3, NO(N, L)
  475.                 PRINT #3, MI(N, L)
  476.                 PRINT #3, SS(N, L)
  477.                 PRINT #3, MA(N, L)
  478.         NEXT L
  479.         FOR L = 1 TO 361
  480.                 FOR M = 1 TO 6
  481.                         PRINT #3, SSAZ(N, L, M)
  482.                         PRINT #3, NOAZ(N, L, M)
  483.                 NEXT M
  484.         NEXT L
  485.         FOR L = 1 TO 6
  486.                 PRINT #3, SB(N, L)
  487.                 PRINT #3, NA(N, L)
  488.         NEXT L
  489. NEXT N
  490. IF Az = 0 THEN CALL InitScrn
  491. IF Az = 1 THEN CALL InitScrnA
  492. END SUB
  493.  
  494.